package com.itany.corejava.code07_面向对象;

/**
 * @author: 石小俊
 * @date: 2023年03月06日 16:56
 * @version: 1.0
 */
public class Test04_静态变量 {
    public static void main(String[] args) {
        SomeClass sc = new SomeClass();
        // 只有静态变量可以通过类名.属性名访问
        SomeClass.name = "admin";
        // 静态变量支持对象.属性的方式访问
        // 只是不建议使用
        sc.name = "jack";
        System.out.println("name:"+SomeClass.name);
        // 实例变量必须通过对象访问
        sc.age = 18;
        System.out.println("sc age:"+sc.age);

        System.out.println("----------------------------");
        SomeClass sc2 = new SomeClass();
        sc2.name = "alice";
        sc2.age = 20;
        // 静态变量是属于类的,所有对象共用的
        // 因此,只要有任意一个对象对name进行了操作
        // 其他对象获取时,都是被操作后的name
        System.out.println("name:"+SomeClass.name);
        System.out.println("sc name:"+sc.name);
        System.out.println("sc2 name:"+sc2.name);

        // 实例变量是属于对象的
        // 每一个对象都有一个属于自己的age属性
        // 因此,某一个对象对age进行了修改,不会影响到其他对象age
        System.out.println("sc age:"+sc.age);
        System.out.println("sc2 age:"+sc2.age);
    }
}

class SomeClass{
    // 全局变量可以是静态变量,也可以是实例变量
    // 类变量,静态变量
    static String name;
    // 实例变量
    int age;

    public void show(){
        System.out.println("这是实例方法");
        // 可以访问静态变量
        System.out.println("name:"+name);
        // 可以访问实例变量
        System.out.println("age:"+age);
        // 可以访问静态方法
        test();
        // 可以访问实例方法
        show2();
    }

    public void show2(){
        System.out.println("这是第二个实例方法");
    }

    public static void test(){
        System.out.println("这是静态方法");
        // 可以访问静态变量
        System.out.println("name:"+name);
        // 可以访问静态方法
        test2();
        // 不能访问实例变量
        // System.out.println("age:"+age);
        // 不能访问实例方法
        // show();
    }

    public static void test2(){
        System.out.println("这是第二个静态方法");
    }
}

class Test_静态方法{
    public static void main(String[] args) {
        SomeClass.name = "admin";
        SomeClass sc = new SomeClass();
        System.out.println("-------静态方法--------");
        SomeClass.test();
        sc.test(); // 不建议使用
        System.out.println("-------实例方法--------");
        sc.show();
    }
}

